Jin's Blog
HOME WEEKLY ARCHIVE ABOUT RSS

JS 中数组的遍历

总结一下JS中遍历常用的一些方法。

1.for 循环

let arr = [1, 2, 3, 4]
for (let i = 0; i < arr.length; i++) {
console.log(arr[i])
}
// 1
// 2
...

这是一种常用的遍历方法,可以在 for 循环中使用 breakcontinue 方法来跳出。

2. for…in (对象也可以使用)

let arr = [1, 2, 3, 4]
arr.foo = '123'
for (let i in arr) {
console.log(arr[i])
if (arr[i] = 2) {
break
}
}
// 1
// 2
...
// 123

for...in 循环不仅可以遍历对象,也可以遍历数组。当 “对象” 为数组时,“变量” 指的是数组的 “索引”,当 “对象” 为对象是,“变量” 指的是对象的 “属性”。

但是因为还会遍历非键值,以及原型属性所以尽量不要使用。

3. for…of

let arr = [1, 2, 3, 4]
for (let i of arr) {
console.log(i)
}
// 1
// 2
...

与 for…in 不同的是,for…of 返回的直接是值。而 for…in 得到的是 key,且 for…of 无法遍历对象

4. map()

let numbers = [1, 2, 3]

let num = numbers.map((n) => {
return n + 1
})
num
// [2, 3, 4]

numbers
// [1, 2, 3]

map 方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回

map 方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。该方法不会改变原数组。

5. forEach()

let numbers = [1, 2, 3]

numbers.forEach((n) => {
return n + 1
})
// [2, 3, 4]

numbers
// [1, 2, 3]

forEachmap 的区别是它只操作数据本身,并没有返回值。而 map 会返回一个新的数组~,但是相同点是它们的参数函数都可以传入三个参数。该方法不会改变原数组。

6. filter()

[1, 2, 3, 4, 5].filter((elem) => {
return (elem > 3);
})
// [4, 5]

filter 方法用于过滤数组成员,满足条件的成员组成一个新数组返回

它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。

7. some()

let arr = [1, 2, 3, 4, 5];
debugger;
arr.some((elem) => {
return elem >= 3;
});
// true

some 方法是用来判断数组的内容是否符合某种条件。接受的参数和 map, forEach 一样。

some 方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false且只要有一个成员能返回 true,那么遍历就会停止!

some 相似的还有 every

8. every()

let arr = [1, 2, 3, 4, 5];
arr.every((elem) => {
console.log('didi:', elem)
return elem >= 3;
});
// false

let arr = [1, 2, 3, 4, 5];
arr.every((elem) => {
return elem >= 1;
});
// true

every 的区别是,当所有成员都返回 true 的时候,才会返回 true且只要有一个成员能返回 false,那么遍历就会停止!

参考:阮一峰 JavaScript 标准参考指南

PREVIOUS

七月实习小记

NEXT

JavaScript 二叉搜索树

ALL TAGS